package com.kakaxi.mybilibili.base;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.Toast;

/**
 * Title : 基本碎片类
 * <p>
 * Description : 包括了一些常用的方法
 * <p>
 * CreatedTime : 2014-11-30
 *
 * @author wuliao & kakaxi & yi & flame & Charl_ZH
 * @version 1.0
 */

public abstract class BaseFragment extends Fragment {

    /**
     * 上下文本
     */
    protected static Context context;

    /**
     * 当前的活动类
     */
    private BaseActivity mActivity;

    /**
     * 轻量级保存
     */
    protected SharedPreferences settings;

    /** 碎片布局 **/
    private ViewGroup mViewGroup;

    /** 碎片的标题 **/
    private String mTitle;

    /**
     * 设置Action
     */
    private ImageButton settingBtn;
    /** 打开模板按钮 **/
    private ImageButton templetBtn;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            mActivity = (BaseActivity) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must extends BaseActivity");
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = mActivity.getBaseContext();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
            Bundle savedInstanceState) {
        // 对布局进行复用处理, 起到优化作用
        if (mViewGroup == null && getContentViewId() != 0) {
            // 获取当前碎片的布局
            mViewGroup = (ViewGroup) inflater.inflate(getContentViewId(),
                    container, false);
            if (mViewGroup != null) {
                preliminary();
            }
        }
        return mViewGroup;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mActivity = null;
    }

    /**
     * 展示信息前的准备工作在这个方法中处理
     */
    protected void preliminary() {
        // 初始化视图
        setupViews(mViewGroup);
        // 初始化数据
        initData();
    }

    /**
     * 获取布局id
     *
     * @return
     */
    protected abstract int getContentViewId();

    /**
     * 初始化视图
     *
     * @param viewGroup 通过这个布局获取里面的控件
     */
    protected abstract void setupViews(ViewGroup viewGroup);

    /**
     * 初始化数据
     */
    protected abstract void initData();

    /**
     * 获取基础活动
     *
     * @return
     */
    public BaseActivity getBaseActivity() {
        return mActivity;
    }

    /**
     * 进入指定活动并携带数据包
     *
     * @param cls
     * @param bundle 数据包
     */
    public void goActivity(Class<?> cls, Bundle bundle) {
        Intent intent = new Intent(getActivity(), cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * 进入指定活动类
     *
     * @param cls 将打开的活动类
     */
    public void goActivity(Class<?> cls) {
        this.goActivity(cls, null);
    }

    /**
     * 携带参数进入指定活动类并要求返回结果
     *
     * @param cls         跳转的活动类
     * @param bundle      参数
     * @param requestCode 请求代号
     */
    public void goActivityAndResult(Class<?> cls, Bundle bundle, int requestCode) {
        Intent intent = new Intent(getActivity(), cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }

    /**
     * 进入指定活动类并要求返回结果
     *
     * @param cls         跳转的活动类
     * @param requestCode 请求代号
     */
    public void goActivityAndResult(Class<?> cls, int requestCode) {
        this.goActivityAndResult(cls, null, requestCode);
    }

    //toast处理器
    private static Handler toastHandler = new Handler() {

        //处理信息
        public void handleMessage(android.os.Message msg) {
            //发送toast
            Toast.makeText(context, msg.obj.toString(),
                    Toast.LENGTH_SHORT).show();
        }

        ;
    };

    /**
     * 调用toastHandler弹出toast
     *
     * @param text toast的信息
     */
    public void toastHandler(String text) {
        toastHandler.obtainMessage(0, text).sendToTarget();
    }

    /**
     * 写入xml文件
     *
     * @param name  xml文件名
     * @param key   键
     * @param value 键值
     */
    public void writeXML(String name, String key, String value) {
        settings = mActivity.getSharedPreferences(name, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString(key, value);
        editor.commit();
    }

    /**
     * 将boolean写入xml中
     *
     * @param name  xml文件名
     * @param key   键名
     * @param value 键值
     */
    public void writeXMLBoolean(String name, String key, Boolean value) {
        settings = mActivity.getSharedPreferences(name, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean(key, value);
        editor.commit();
    }

    /**
     * 获取xml键值
     *
     * @param name xml文件名
     * @param key  键名
     * @return 如果返回空证明键值不存在
     */
    public String readXML(String name, String key) {
        settings = mActivity.getSharedPreferences(name, Context.MODE_PRIVATE);
        if (settings.contains(key)) {
            return settings.getString(key, null);
        } else {
            return null;
        }
    }

    /**
     * 读取xml中的boolean
     *
     * @param name xml文件名
     * @param key  键名
     * @return 返回读取的布尔值，不能读取时返回null
     */
    public Object readXMLBoolean(String name, String key) {
        settings = mActivity.getSharedPreferences(name, Context.MODE_PRIVATE);
        if (settings.contains(key)) {
            return settings.getBoolean(key, false);
        } else {
            return null;
        }
    }

    /****
     * 删除xml里面的键值
     *
     * @param name xml的文件名
     * @param key  键值
     */
    public void removeXML(String name, String key) {
        settings = mActivity.getSharedPreferences(name, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.remove(key);
        editor.commit();
    }

    /**
     * 设置标题
     *
     * @param title 标题
     */
    public void setTitle(String title) {
        mTitle = title;
    }

    /**
     * 返回标题
     *
     * @return 标题
     */
    public String getTitle() {
        return mTitle;
    }


    /**
     *
     */
//	protected void initSettingBtn(ViewGroup parent) {
//		settingBtn = (ImageButton) parent.findViewById(R.id.header_menu_btn);
//		settingBtn.setOnClickListener(new OnClickListener() {
//
//			@Override
//			public void onClick(View v) {
//				showPopupMenu();
//			}
//		});
//	}

    /**
     * 初始化模板按钮
     * @param parent
     */
//	protected void initTempletBtn(ViewGroup parent) {
//		templetBtn = (ImageButton) parent.findViewById(R.id.header_templet_btn);
//		templetBtn.setOnClickListener(new OnClickListener() {
//
//			@Override
//			public void onClick(View v) {
//				goActivity(ShowTemplateActivity.class);
//			}
//		});
//	}

    /**
     *
     */
//	private void showPopupMenu() {
//		PopupMenuCompat popupMenu = PopupMenuCompat.newInstance(activity, settingBtn);
//		popupMenu.inflate(R.menu.main_context_menu);
//		popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
//			@Override
//			public boolean onMenuItemClick(MenuItem item) {
//				switch (item.getItemId()) {
//				case R.id.action_settings: {
//					goActivity(SettingActivity.class);
//					break;
//				}
//				}
//				return false;
//			}
//		});
//		popupMenu.show();
//	}

}
